package com.ftg.learn.day12;

import com.ftg.learn.day09.exam02.Dog;

import java.util.*;

/**
 * 学习一下树形map的使用
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/8/23 上午8:51
 */
public class LearnTreemap {
    /**
     * 在答面试  不要背书，要有专业术语  还要有自我对问题以及技术的理解
     */
    public static void main(String[] args) {
        //无参的构造方法时，  comparator = null;
        //函数式接口，用来完成比较的接口，可以通过lambda来实现功能
//        Comparator   compare
        // 普通接口让类来实现的，实现此接口的类，要重写compareTo方法 来完成两个对象的比较,可以自然比较
//        Comparable接口   compareTo
//        comparator

//        comparator  叫比较 器  ,作用时，可以参考你传递过来的比较方式进行排序 ，也就是说可以完全参考比定的顺序来完成输出
        //由于你现在没有使用比较器，所以按照自然排序法（String   hashcode）
        Map<String, Integer> map = new TreeMap<>((o1, o2) -> -(o1.substring(0, 1).hashCode() - o2.substring(0, 1).hashCode()));
        //TreeMap 本身可以用户自行指定比较规则 ，排序方式
        map.put("a", 4);
        map.put("bfsdafdsfs", 4);
        map.put("cfsdfsf", 4);
        map.put("dfkjfdsajkfs", 4);

        System.out.println(map);


        //把每一个同学的信息，按照考试成绩来进行排序...

        Map<Integer, Map<String, Object>> m1 = new TreeMap<>();

        Map<String, Object> stu1 = new HashMap<>(2);
        stu1.put("name", "张萌");
        stu1.put("score", 100);

        m1.put(100, stu1);

        Map<String, Object> stu2 = new HashMap<>(2);
        stu2.put("name", "薛旭辉");
        stu2.put("score", 98);

        m1.put(98, stu2);


        Map<String, Object> stu3 = new HashMap<>(2);
        stu3.put("name", "康加修");
        stu3.put("score", 59);

        m1.put(98, stu2);

        System.out.println(m1);

        List<Map<String, Object>> list1 = new ArrayList<>();
        list1.add(stu3);
        list1.add(stu1);
        list1.add(stu2);



        // sort 排序方法
//        list1.sort((o1, o2) -> (int)o1.get("score") - (int)o2.get("score"));
        //x map
        list1.sort(Comparator.comparingInt(x->-(int)x.get("score")));

        System.out.println(list1);

        List<Dog> list3  =new ArrayList<>();
        Dog d1 = new Dog();
        d1.setAge(23);
        list3.add(d1);
        Dog d2 = new Dog();
        d2.setAge(34);
        list3.add(d2);

        list3.sort(Dog::compareTo);

        list3.sort(Comparator.comparingDouble(x->x.getName().length()));

        System.out.println(list3);

    }

}
